package org.lee.common.core.handler;

import cn.dev33.satoken.exception.SaTokenException;
import lombok.extern.slf4j.Slf4j;
import org.lee.common.core.vo.response.AjaxResult;
import org.lee.common.exception.ServiceException;
import org.noear.solon.core.handle.Context;

/**
 * 全局异常处理工具类，将异常转为通用结果
 *
 * @author xuyuxiang
 */
@Slf4j
public final class GlobalExceptionHandler {
    private GlobalExceptionHandler() {
    }

    /**
     * 根据错误类型获取对应的CommonResult
     *
     * @author xuyuxiang
     **/
    public static AjaxResult getCommonResult(Exception e) {
        if (e instanceof SaTokenException) {
            // 如果是SaToken相关异常，则由AuthExceptionUtil处理
            return AjaxResult.error(((SaTokenException) e).getCode(), e.getMessage());
        } else if (e instanceof ServiceException) {
            // 通用业务异常，直接返回给前端
            return AjaxResult.error(((ServiceException) e).getCode(), e.getMessage());
        } else {
            // 未知异常打印详情
            log.error(">>> 服务器未知异常，请求地址：{}，具体信息：", Context.current().uri().getPath(), e);
            // 未知异常返回服务器异常
            return AjaxResult.error("服务器异常");
        }
    }
}
